;;; -*- Mode: Lisp; Syntax: Common-Lisp; Package: snark -*-
;;; File: jepd-relations-tables.lisp
;;; The contents of this file are subject to the Mozilla Public License
;;; Version 1.1 (the "License"); you may not use this file except in
;;; compliance with the License. You may obtain a copy of the License at
;;; http://www.mozilla.org/MPL/
;;;
;;; Software distributed under the License is distributed on an "AS IS"
;;; basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
;;; License for the specific language governing rights and limitations
;;; under the License.
;;;
;;; The Original Code is SNARK.
;;; The Initial Developer of the Original Code is SRI International.
;;; Portions created by the Initial Developer are Copyright (C) 1981-2002.
;;; All Rights Reserved.
;;;
;;; Contributor(s): Mark E. Stickel <stickel@ai.sri.com>.

(in-package :snark)

(defparameter $rcc8-relation-code
  '((tpp . 0) (ntpp . 1) (dc . 2) (ec . 3) (po . 4) (eq . 5) (ntppi . 6) (tppi . 7)))

(defparameter $time-ii-relation-code
  '((< . 0) (d . 1) (o . 2) (m . 3) (s . 4) (f . 5) (= . 6)
    (fi . 7) (si . 8) (mi . 9) (oi . 10) (di . 11) (> . 12)))

(defparameter $time-pp-relation-code
  '((p<p . 0) (p=p . 1) (p>p . 2)))

(defparameter $time-pi-relation-code
  '((p<i . 0) (p_s_i . 1) (p_d_i . 2) (p_f_i . 3) (p>i . 4)))

(defparameter $time-ip-relation-code
  '((i>p . 0) (i_si_p . 1) (i_di_p . 2) (i_fi_p . 3) (i<p . 4)))

(defparameter $rcc8-composition-table
  ;; from Cohn, Bennett, Gooday, and Gotts
  ;; "Qualitative Spatial Representation and Reasoning with the Region Connection Calculus"
  ;; Geoinformatica 1 (1997), 1-44
  '((dc dc       dc ec po tpp ntpp tppi ntppi eq)
    (dc ec       dc ec po tpp ntpp              )
    (dc po       dc ec po tpp ntpp              )
    (dc tpp      dc ec po tpp ntpp              )
    (dc ntpp     dc ec po tpp ntpp              )
    (dc tppi     dc                             )
    (dc ntppi    dc                             )
    (dc eq       dc                             )
    (ec dc       dc ec po          tppi ntppi   )
    (ec ec       dc ec po tpp      tppi       eq)
    (ec po       dc ec po tpp ntpp              )
    (ec tpp         ec po tpp ntpp              )
    (ec ntpp           po tpp ntpp              )
    (ec tppi     dc ec                          )
    (ec ntppi    dc                             )
    (ec eq       ec                             )
    (po dc       dc ec po          tppi ntppi   )
    (po ec       dc ec po          tppi ntppi   )
    (po po       dc ec po tpp ntpp tppi ntppi eq)
    (po tpp            po tpp ntpp              )
    (po ntpp           po tpp ntpp              )
    (po tppi     dc ec po          tppi ntppi   )
    (po ntppi    dc ec po          tppi ntppi   )
    (po eq             po                       )
    (tpp dc      dc                             )
    (tpp ec      dc ec                          )
    (tpp po      dc ec po tpp ntpp              )
    (tpp tpp              tpp ntpp              )
    (tpp ntpp                 ntpp              )
    (tpp tppi    dc ec po tpp      tppi       eq)
    (tpp ntppi   dc ec po          tppi ntppi   )
    (tpp eq               tpp                   )
    (ntpp dc     dc                             )
    (ntpp ec     dc                             )
    (ntpp po     dc ec po tpp ntpp              )
    (ntpp tpp                 ntpp              )
    (ntpp ntpp                ntpp              )
    (ntpp tppi   dc ec po tpp ntpp              )
    (ntpp ntppi  dc ec po tpp ntpp tppi ntppi eq)
    (ntpp eq                  ntpp              )
    (tppi dc     dc ec po          tppi ntppi   )
    (tppi ec        ec po          tppi ntppi   )
    (tppi po           po          tppi ntppi   )
    (tppi tpp          po tpp      tppi       eq)
    (tppi ntpp         po tpp ntpp              )
    (tppi tppi                     tppi ntppi   )
    (tppi ntppi                         ntppi   )
    (tppi eq                       tppi         )
    (ntppi dc    dc ec po          tppi ntppi   )
    (ntppi ec          po          tppi ntppi   )
    (ntppi po          po          tppi ntppi   )
    (ntppi tpp         po          tppi ntppi   )
    (ntppi ntpp        po tpp ntpp tppi ntppi eq)
    (ntppi tppi                         ntppi   )
    (ntppi ntppi                        ntppi   )
    (ntppi eq                           ntppi   )
    (eq dc       dc                             )
    (eq ec          ec                          )
    (eq po             po                       )
    (eq tpp               tpp                   )
    (eq ntpp                  ntpp              )
    (eq tppi                       tppi         )
    (eq ntppi                           ntppi   )
    (eq eq                                    eq)))

(defparameter $time-iii-composition-table
  '((< < <)
    (< > < > d di o oi m mi s si f fi =)
    (< d < d o m s)
    (< di <)
    (< o <)
    (< oi < d o m s)
    (< m <)
    (< mi < d o m s)
    (< s <)
    (< si <)
    (< f < d o m s)
    (< fi <)
    (< = <)
    (> < < > d di o oi m mi s si f fi =)
    (> > >)
    (> d > d oi mi f)
    (> di >)
    (> o > d oi mi f)
    (> oi >)
    (> m > d oi mi f)
    (> mi >)
    (> s > d oi mi f)
    (> si >)
    (> f >)
    (> fi >)
    (> = >)
    (d < <)
    (d > >)
    (d d d)
    (d di < > d di o oi m mi s si f fi =)
    (d o < d o m s)
    (d oi > d oi mi f)
    (d m <)
    (d mi >)
    (d s d)
    (d si > d oi mi f)
    (d f d)
    (d fi < d o m s)
    (d = d)
    (di < < di o m fi)
    (di > > di oi mi si)
    (di d d di o oi s si f fi =)
    (di di di)
    (di o di o fi)
    (di oi di oi si)
    (di m di o fi)
    (di mi di oi si)
    (di s di o fi)
    (di si di)
    (di f di oi si)
    (di fi di)
    (di = di)
    (o < <)
    (o > > di oi mi si)
    (o d d o s)
    (o di < di o m fi)
    (o o < o m)
    (o oi d di o oi s si f fi =)
    (o m <)
    (o mi di oi si)
    (o s o)
    (o si di o fi)
    (o f d o s)
    (o fi < o m)
    (o = o)
    (oi < < di o m fi)
    (oi > >)
    (oi d d oi f)
    (oi di > di oi mi si)
    (oi o d di o oi s si f fi =)
    (oi oi > oi mi)
    (oi m di o fi)
    (oi mi >)
    (oi s d oi f)
    (oi si > oi mi)
    (oi f oi)
    (oi fi di oi si)
    (oi = oi)
    (m < <)
    (m > > di oi mi si)
    (m d d o s)
    (m di <)
    (m o <)
    (m oi d o s)
    (m m <)
    (m mi f fi =)
    (m s m)
    (m si m)
    (m f d o s)
    (m fi <)
    (m = m)
    (mi < < di o m fi)
    (mi > >)
    (mi d d oi f)
    (mi di >)
    (mi o d oi f)
    (mi oi >)
    (mi m s si =)
    (mi mi >)
    (mi s d oi f)
    (mi si >)
    (mi f mi)
    (mi fi mi)
    (mi = mi)
    (s < <)
    (s > >)
    (s d d)
    (s di < di o m fi)
    (s o < o m)
    (s oi d oi f)
    (s m <)
    (s mi mi)
    (s s s)
    (s si s si =)
    (s f d)
    (s fi < o m)
    (s = s)
    (si < < di o m fi)
    (si > >)
    (si d d oi f)
    (si di di)
    (si o di o fi)
    (si oi oi)
    (si m di o fi)
    (si mi mi)
    (si s s si =)
    (si si si)
    (si f oi)
    (si fi di)
    (si = si)
    (f < <)
    (f > >)
    (f d d)
    (f di > di oi mi si)
    (f o d o s)
    (f oi > oi mi)
    (f m m)
    (f mi >)
    (f s d)
    (f si > oi mi)
    (f f f)
    (f fi f fi =)
    (f = f)
    (fi < <)
    (fi > > di oi mi si)
    (fi d d o s)
    (fi di di)
    (fi o o)
    (fi oi di oi si)
    (fi m m)
    (fi mi di oi si)
    (fi s o)
    (fi si di)
    (fi f f fi =)
    (fi fi fi)
    (fi = fi)
    (= < <)
    (= > >)
    (= d d)
    (= di di)
    (= o o)
    (= oi oi)
    (= m m)
    (= mi mi)
    (= s s)
    (= si si)
    (= f f)
    (= fi fi)
    (= = =)))

(defparameter $time-ppp-composition-table
  '((p<p p<p p<p) 
    (p<p p>p p<p p>p p=p) 
    (p<p p=p p<p) 
    (p>p p<p p<p p>p p=p) 
    (p>p p>p p>p) 
    (p>p p=p p>p) 
    (p=p p<p p<p) 
    (p=p p>p p>p) 
    (p=p p=p p=p)))

(defparameter $time-pii-composition-table
  '((p<i < p<i) 
    (p<i > p<i p>i p_d_i p_s_i p_f_i) 
    (p<i d p<i p_d_i p_s_i) 
    (p<i di p<i) 
    (p<i o p<i) 
    (p<i oi p<i p_d_i p_s_i) 
    (p<i m p<i) 
    (p<i mi p<i p_d_i p_s_i) 
    (p<i s p<i) 
    (p<i si p<i) 
    (p<i f p<i p_d_i p_s_i) 
    (p<i fi p<i) 
    (p<i = p<i) 
    (p>i < p<i p>i p_d_i p_s_i p_f_i) 
    (p>i > p>i) 
    (p>i d p>i p_d_i p_f_i) 
    (p>i di p>i) 
    (p>i o p>i p_d_i p_f_i) 
    (p>i oi p>i) 
    (p>i m p>i p_d_i p_f_i) 
    (p>i mi p>i) 
    (p>i s p>i p_d_i p_f_i) 
    (p>i si p>i) 
    (p>i f p>i) 
    (p>i fi p>i) 
    (p>i = p>i) 
    (p_d_i < p<i) 
    (p_d_i > p>i) 
    (p_d_i d p_d_i) 
    (p_d_i di p<i p>i p_d_i p_s_i p_f_i) 
    (p_d_i o p<i p_d_i p_s_i) 
    (p_d_i oi p>i p_d_i p_f_i) 
    (p_d_i m p<i) 
    (p_d_i mi p>i) 
    (p_d_i s p_d_i) 
    (p_d_i si p>i p_d_i p_f_i) 
    (p_d_i f p_d_i) 
    (p_d_i fi p<i p_d_i p_s_i) 
    (p_d_i = p_d_i) 
    (p_s_i < p<i) 
    (p_s_i > p>i) 
    (p_s_i d p_d_i) 
    (p_s_i di p<i) 
    (p_s_i o p<i) 
    (p_s_i oi p_d_i) 
    (p_s_i m p<i) 
    (p_s_i mi p_f_i) 
    (p_s_i s p_s_i) 
    (p_s_i si p_s_i) 
    (p_s_i f p_d_i) 
    (p_s_i fi p<i) 
    (p_s_i = p_s_i) 
    (p_f_i < p<i) 
    (p_f_i > p>i) 
    (p_f_i d p_d_i) 
    (p_f_i di p>i) 
    (p_f_i o p_d_i) 
    (p_f_i oi p>i) 
    (p_f_i m p_s_i) 
    (p_f_i mi p>i) 
    (p_f_i s p_d_i) 
    (p_f_i si p>i) 
    (p_f_i f p_f_i) 
    (p_f_i fi p_f_i) 
    (p_f_i = p_f_i)))

(defparameter $time-ppi-composition-table
  '((p<p p<i p<i) 
    (p<p p>i p<i p>i p_d_i p_s_i p_f_i) 
    (p<p p_d_i p<i p_d_i p_s_i) 
    (p<p p_s_i p<i) 
    (p<p p_f_i p<i p_d_i p_s_i) 
    (p>p p<i p<i p>i p_d_i p_s_i p_f_i) 
    (p>p p>i p>i) 
    (p>p p_d_i p>i p_d_i p_f_i) 
    (p>p p_s_i p>i p_d_i p_f_i) 
    (p>p p_f_i p>i) 
    (p=p p<i p<i) 
    (p=p p>i p>i) 
    (p=p p_d_i p_d_i) 
    (p=p p_s_i p_s_i) 
    (p=p p_f_i p_f_i)))

(defparameter $time-pip-composition-table
  '((p<i i>p p<p p>p p=p) 
    (p<i i<p p<p) 
    (p<i i_di_p p<p) 
    (p<i i_si_p p<p) 
    (p<i i_fi_p p<p) 
    (p>i i>p p>p) 
    (p>i i<p p<p p>p p=p) 
    (p>i i_di_p p>p) 
    (p>i i_si_p p>p) 
    (p>i i_fi_p p>p) 
    (p_d_i i>p p>p) 
    (p_d_i i<p p<p) 
    (p_d_i i_di_p p<p p>p p=p) 
    (p_d_i i_si_p p>p) 
    (p_d_i i_fi_p p<p) 
    (p_s_i i>p p>p) 
    (p_s_i i<p p<p) 
    (p_s_i i_di_p p<p) 
    (p_s_i i_si_p p=p) 
    (p_s_i i_fi_p p<p) 
    (p_f_i i>p p>p) 
    (p_f_i i<p p<p) 
    (p_f_i i_di_p p>p) 
    (p_f_i i_si_p p>p) 
    (p_f_i i_fi_p p=p)))

(defparameter $time-ipi-composition-table
  '((i>p p<i < > d di o oi m mi s si f fi =) 
    (i>p p>i >) 
    (i>p p_d_i > d oi mi f) 
    (i>p p_s_i > d oi mi f) 
    (i>p p_f_i >) 
    (i<p p<i <) 
    (i<p p>i < > d di o oi m mi s si f fi =) 
    (i<p p_d_i < d o m s) 
    (i<p p_s_i <) 
    (i<p p_f_i < d o m s) 
    (i_di_p p<i < di o m fi) 
    (i_di_p p>i > di oi mi si) 
    (i_di_p p_d_i d di o oi s si f fi =) 
    (i_di_p p_s_i di o fi) 
    (i_di_p p_f_i di oi si) 
    (i_si_p p<i < di o m fi) 
    (i_si_p p>i >) 
    (i_si_p p_d_i d oi f) 
    (i_si_p p_s_i s si =) 
    (i_si_p p_f_i mi) 
    (i_fi_p p<i <) 
    (i_fi_p p>i > di oi mi si) 
    (i_fi_p p_d_i d o s) 
    (i_fi_p p_s_i m) 
    (i_fi_p p_f_i f fi =)))

(defparameter $time-iip-composition-table
  '((< i>p i>p i<p i_di_p i_si_p i_fi_p) 
    (< i<p i<p) 
    (< i_di_p i<p) 
    (< i_si_p i<p) 
    (< i_fi_p i<p) 
    (> i>p i>p) 
    (> i<p i>p i<p i_di_p i_si_p i_fi_p) 
    (> i_di_p i>p) 
    (> i_si_p i>p) 
    (> i_fi_p i>p) 
    (d i>p i>p) 
    (d i<p i<p) 
    (d i_di_p i>p i<p i_di_p i_si_p i_fi_p) 
    (d i_si_p i>p) 
    (d i_fi_p i<p) 
    (di i>p i>p i_di_p i_si_p) 
    (di i<p i<p i_di_p i_fi_p) 
    (di i_di_p i_di_p) 
    (di i_si_p i_di_p) 
    (di i_fi_p i_di_p) 
    (o i>p i>p i_di_p i_si_p) 
    (o i<p i<p) 
    (o i_di_p i<p i_di_p i_fi_p) 
    (o i_si_p i_di_p) 
    (o i_fi_p i<p) 
    (oi i>p i>p) 
    (oi i<p i<p i_di_p i_fi_p) 
    (oi i_di_p i>p i_di_p i_si_p) 
    (oi i_si_p i>p) 
    (oi i_fi_p i_di_p) 
    (m i>p i>p i_di_p i_si_p) 
    (m i<p i<p) 
    (m i_di_p i<p) 
    (m i_si_p i_fi_p) 
    (m i_fi_p i<p) 
    (mi i>p i>p) 
    (mi i<p i<p i_di_p i_fi_p) 
    (mi i_di_p i>p) 
    (mi i_si_p i>p) 
    (mi i_fi_p i_si_p) 
    (s i>p i>p) 
    (s i<p i<p) 
    (s i_di_p i<p i_di_p i_fi_p) 
    (s i_si_p i_si_p) 
    (s i_fi_p i<p) 
    (si i>p i>p) 
    (si i<p i<p i_di_p i_fi_p) 
    (si i_di_p i_di_p) 
    (si i_si_p i_si_p) 
    (si i_fi_p i_di_p) 
    (f i>p i>p) 
    (f i<p i<p) 
    (f i_di_p i>p i_di_p i_si_p) 
    (f i_si_p i>p) 
    (f i_fi_p i_fi_p) 
    (fi i>p i>p i_di_p i_si_p) 
    (fi i<p i<p) 
    (fi i_di_p i_di_p) 
    (fi i_si_p i_di_p) 
    (fi i_fi_p i_fi_p) 
    (= i>p i>p) 
    (= i<p i<p) 
    (= i_di_p i_di_p) 
    (= i_si_p i_si_p) 
    (= i_fi_p i_fi_p)))

(defparameter $time-ipp-composition-table
  '((i>p p<p i>p i<p i_di_p i_si_p i_fi_p) 
    (i>p p>p i>p) 
    (i>p p=p i>p) 
    (i<p p<p i<p) 
    (i<p p>p i>p i<p i_di_p i_si_p i_fi_p) 
    (i<p p=p i<p) 
    (i_di_p p<p i<p i_di_p i_fi_p) 
    (i_di_p p>p i>p i_di_p i_si_p) 
    (i_di_p p=p i_di_p) 
    (i_si_p p<p i<p i_di_p i_fi_p) 
    (i_si_p p>p i>p) 
    (i_si_p p=p i_si_p) 
    (i_fi_p p<p i<p) 
    (i_fi_p p>p i>p i_di_p i_si_p) 
    (i_fi_p p=p i_fi_p)))

;;; jepd-relations-tables.lisp
